package com.jt.controller;

import com.jt.pojo.User;
import com.jt.service.UserService;
import com.jt.vo.PageResult;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@CrossOrigin
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

//    @GetMapping("/hello")
//    public List<User> hello(){
//
//        return userService.findAll();
//    }
    /**
     * 业务需求:用户登陆校验URL: /user/login
     * 参数: username/password  JSON串
     * 返回值:SysResult对象data 的String类型的信息token
     */
    @PostMapping("/login")
    public SysResult login(@RequestBody User user)
    {
        String token=userService.login(user);
        if(token==null)
           return SysResult.fail();
        //返回给前端唯一的标识符进行校验
        return SysResult.success(token);
    }

    @GetMapping("/list")
    public SysResult list(PageResult pageResult){
        PageResult page= userService.list(pageResult);
        return  SysResult.success(page);
    }

    @PutMapping("/status/{id}/{status}")
     // 因为前端传的是模板函数直接将参数嵌入到了url地址里面,不需要@RequestBody
    //$http.put(`/user/status/${user.id}/${user.status}`)
    public SysResult status(User user)
    {
        userService.changeStatus(user);
        return  SysResult.success();
    }

    @PostMapping("/addUser")
    public SysResult addUser(@RequestBody User user){
        userService.addUser(user);
       return  SysResult.success();
    }

    @GetMapping("/{id}")
    public SysResult selectById(@PathVariable Integer id){
         User user=userService.selectById(id);
         return SysResult.success(user);
    }

    @PutMapping("/updateUser")
    public SysResult updateUser(@RequestBody User user)
    {
          userService.updateUser(user);
          return  SysResult.success();
    }

    @DeleteMapping("/{id}")
    public SysResult deleteById(@PathVariable Integer id)
    {
 //常规操作
//    说明:一般控制异常信息.通常情况下需要添加try-catch 用法.
//    弊端:所有的方法都需要try-catch的控制.必然导致代码的结构复杂.
//    解决方案: Spring内部提供了一种规则全局异常的处理机制!
//        try {
//            userService.deleteById(id);
//            return  SysResult.success();
//        }catch(Exception e){
//            e.printStackTrace();
//            return  SysResult.fail();
//        }
             userService.deleteById(id);
             return  SysResult.success();

    }


}
